﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.IO;
using DO = DataObjects;
using DM = DataMapping;

namespace DataAccess
{
    public class DadosBancariosDB
    {
        #region Metodos Publicos

        public static DO.DadosBancarios GetItem(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.DadosBancario dadosBancarios = (from db in dc.DadosBancarios
                                                   where db.IdDadosBancarios == id
                                                   select db).FirstOrDefault();

                return FillRecord(dadosBancarios);
            }
        }

        public static List<DO.DadosBancarios> GetList()
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                List<DM.DadosBancario> dadosBancariosList = (from db in dc.DadosBancarios
                                                             select db).ToList();

                List<DO.DadosBancarios> dadosBancariosListReturn = new List<DO.DadosBancarios>();
                foreach (DM.DadosBancario db in dadosBancariosList)
                    dadosBancariosListReturn.Add(FillRecord(db));

                return dadosBancariosListReturn;
            }
        }

        public static int Save(DO.DadosBancarios dadosBancarios)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.DadosBancario dadosBancariosDB = (from db in dc.DadosBancarios
                                                     where db.IdDadosBancarios == dadosBancarios.Id
                                                     select db).FirstOrDefault();

                if (dadosBancariosDB == null)
                {
                    dadosBancariosDB = new DM.DadosBancario();

                    dadosBancariosDB.IdFornecedor = dadosBancarios.IdFornecedor;
                    dadosBancariosDB.NumBanco = dadosBancarios.NumBanco;
                    dadosBancariosDB.NomeBanco = dadosBancarios.NomeBanco;
                    dadosBancariosDB.Agencia = dadosBancarios.Agencia;
                    dadosBancariosDB.Conta = dadosBancarios.Conta;

                    dc.DadosBancarios.InsertOnSubmit(dadosBancariosDB);
                }
                else
                {
                    dadosBancariosDB.IdDadosBancarios = dadosBancarios.Id;
                    dadosBancariosDB.IdFornecedor = dadosBancarios.IdFornecedor;
                    dadosBancariosDB.NumBanco = dadosBancarios.NumBanco;
                    dadosBancariosDB.NomeBanco = dadosBancarios.NomeBanco;
                    dadosBancariosDB.Agencia = dadosBancarios.Agencia;
                    dadosBancariosDB.Conta = dadosBancarios.Conta;
                }

                try
                {
                    dc.SubmitChanges();
                    return dadosBancariosDB.IdDadosBancarios;
                }
                catch (Exception ex)
                {
                    string date = ((DateTime.Now).ToString()).Substring(0, 9);
                    date = date.Replace('/', '-');
                    string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                    string path = (String.Format("{0}{1}\\Problema Gravação_{2}.txt", @"", location, date));
                    StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                    valor.WriteLine("Erro ao salvar: " + dadosBancariosDB.IdDadosBancarios);
                    valor.WriteLine(ex.Message);
                    valor.WriteLine("------------------------------------------------------");
                    valor.Close();

                    dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                    dc.SubmitChanges();

                    return -1;
                }
            }
        }

        public static bool Delete(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.DadosBancario dadosBancariosDB = (from db in dc.DadosBancarios
                                                     where db.IdDadosBancarios == id
                                                     select db).FirstOrDefault();

                if (dadosBancariosDB != null)
                {
                    try
                    {
                        dc.DadosBancarios.DeleteOnSubmit(dadosBancariosDB);
                        dc.SubmitChanges();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        string date = ((DateTime.Now).ToString()).Substring(0, 9);
                        date = date.Replace('/', '-');
                        string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                        string path = (String.Format("{0}{1}\\Problema Exclusão_{2}.txt", @"", location, date));
                        StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                        valor.WriteLine("Erro ao excluir:" + dadosBancariosDB.IdDadosBancarios);
                        valor.WriteLine(ex.Message);
                        valor.WriteLine("------------------------------------------------------");
                        valor.Close();

                        dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                        dc.SubmitChanges();

                        return true;
                    }
                }
                else
                    return false;
            }
        }

        #endregion

        #region Metodos Privados

        private static DO.DadosBancarios FillRecord(DM.DadosBancario dadosBancariosDB)
        {
            DO.DadosBancarios dadosBancarios = new DO.DadosBancarios();

            dadosBancarios.Id = dadosBancariosDB.IdDadosBancarios;
            dadosBancarios.NomeBanco = dadosBancariosDB.NomeBanco;
            dadosBancarios.Agencia = dadosBancariosDB.Agencia;
            dadosBancarios.Conta = dadosBancariosDB.Conta;
            dadosBancarios.NumBanco = dadosBancariosDB.NumBanco;
            dadosBancarios.IdFornecedor = dadosBancariosDB.IdFornecedor;

            return dadosBancarios;
        }

        #endregion
    }
}
